package highTech.generic;

import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashSet;
import java.util.Vector;

public class GenericTest2 {
	public static void main(String[] args) throws Exception{
		//�������ڷ���
		Constructor<String> constructor=String.class.getConstructor(StringBuffer.class);
		String str=constructor.newInstance(new StringBuffer("aaaa"));
		System.out.println(str);
		
		//���������������˵���ļ���ʱ����ȥ�������͡���Ϣ
		ArrayList<String> collection1=new ArrayList<String>();
		collection1.add("aaa");
		ArrayList<Integer> collection2=new ArrayList<Integer>();
		collection2.add(1);	
		System.out.println(collection1.getClass()==collection2.getClass());
		
		//�����������Ϳ�����ĳ�����ͼ���������������͵����
		collection2.getClass().getMethod("add", Object.class).invoke(collection2, "bbb");
		System.out.println(collection2.get(1));
		
		//ͨ����ʹ��    ʹ�ã�����ʹ��������ֲ�������ͣ���ͨ�����ı�����Ҫ�������ã�
		//���Ե���������޹صķ���
		printCollection(collection2);
		printCollectionObj(new ArrayList<Object>());
		
		//1.�޶�ͨ�����ϱ߽�
		Vector<? extends Number> x=new Vector<Integer>();
		//Vector<? extends Number> y=new Vector<String>();
		
		//2.�޶�ͨ�����±߽�
		Vector<? super Integer> a=new Vector<Number>();
		//Vector<? super Integer> b=new Vector<String>();
		
		//�޶�ͨ������ǰ����Լ�
	}
	
	private static void printCollection(Collection<?> collection){
		//collection.add("aaa");//����      ���ܵ���һ��������й�ϵ�ķ���
		System.out.println(collection.size());
		for(Object obj: collection){
			System.out.println(obj);
		}
		collection=new HashSet<Date>();//��ȷ
	}
	
	
	private static void printCollectionObj(Collection<Object> objs){
		objs.add("aaa");//��ȷ
		
		//objs=new HashSet<Date>();//����
	}
	
}
